Snowball Edge でデータ転送を高速化するための方法を教えてください
困っていた内容
Snowball Edge を使ってオンプレミスのデータを S3 に移行することを検討しています。Snowball Edge へのインポート処理を高速化するための方法やベストプラクティスを教えてください。
どんな情報があるの?
パフォーマンスに関するベストプラクティス等は次の通りです。
- 転送処理の並列化
- 小さいファイルのバッチ処理
- インターフェイスの選択
- マルチパートアップロードの最適化
- ファイルの静的状態維持
- ネットワーク帯域の確保
- ネットワーク経路の削減
なお、Snowball Edge 利用のベストプラクティスとして事前の性能測定が推奨されています。本番データ移行の前に、まずは1台の Snowball Edge を使って各種検証を行うこともご検討ください。
まず1台Snowball Edgeを発注し、実環境で性能測定を行う
基本性能の環境測定後、移行するデータ容量、移行期間の要件に合わせてデータを適切なセグメントに分割し、必要な台数を発注する。
転送処理の並列化
リソースに余裕がある場合は、転送処理を並列化すると転送速度の向上が期待できます。並列化の方法としては、単純に複数ターミナルを起動して複数コマンドを同時に実行する方法もありますが、GNU parallelなど並列化用のツール利用も選択肢です。
AWS 公式ブログに GNU parallel を使用したスクリプトのサンプルが公開されていますので、ぜひご活用ください。
Best practices for accelerating data migrations using AWS Snowball Edge | AWS Storage Blog
The following script can help you parallelize your data transfer by providing a list of files to copy to Snowball Edge
小さいファイルのバッチ処理
小さいファイルが大量に含まれている場合は、バッチ処理を行うと、パフォーマンスへの影響を抑えることが期待できます。具体的には、Snowball Edge に転送する前に ZIP などでアーカイブし、特定のメタデータを付与してから転送すると、オーバーヘッドを抑えることができます。
※アーカイブは S3 にインポートする際に自動的に展開されます。
具体的な方法や対応する形式、付与するメタデータ等はAWS Snowball Edge 開発者ガイドをご確認ください。
小さなファイルのバッチ処理 - AWS Snowball Edge 開発者ガイド
各コピーオペレーションには、暗号化のために多少のオーバーヘッドがあります。小さなファイルをAWS Snowball Edgeデバイスでは、1 つのアーカイブにまとめてバッチ処理できます。ファイルをバッチ処理する際に、サポートされるアーカイブ形式のいずれかでファイルがバッチ処理済みの場合は、Amazon S3 へのインポート時に自動抽出されます。
インターフェイスの選択
Snowball Edge はファイルインターフェイス(NFS)と Amazon S3 インターフェイスがあります。インターフェイスによって仕様は異なり、転送速度を求める場合は、Amazon S3 インターフェイスを利用します。
なお、2021年のアップデートでファイルインターフェイスも Snowball Edge 発注時に指定することで、Amazon S3 インターフェイス同様の転送速度得ることができます。
AWS Snowball Edge Storage Optimized デバイスが高性能 NFS データ転送のサポートを開始
パフォーマンス - AWS Snowball Edge 開発者ガイド
ファイルインターフェイスを使用したデータ転送速度は通常、25 MB/秒~ 40 MB/秒です。これよりも速くデータを転送する必要がある場合は、Amazon S3 インターフェイスを使用します。このインターフェイスでは、通常 250 MB/秒~ 400 MB/秒です。
マルチパートアップロードの最適化
Amazon S3 インターフェイスを利用している場合は、一つのファイルを分割して転送するマルチパートアップロードを活用すると、大きなファイルの転送速度向上が期待できます。マルチパートアップロードはデフォルトで有効になっていますが、転送するファイルサイズの傾向等に合わせて分割の基準サイズなどを調整するとより効果的です。
AWS CLI S3 Configuration — AWS CLI 2.7.28 Command Reference
multipart_threshold
- The size threshold the CLI uses for multipart transfers of individual files.multipart_chunksize
- When using multipart transfers, this is the chunk size that the CLI uses for multipart transfers of individual files.
ファイルの静的状態維持
Snowball Edge へのデータ転送中にファイルが変更されると、パフォーマンスにも悪影響を及ぼします。メタデータなどを含むファイルの編集は、データ転送の前に済ましておきます。
パフォーマンス - AWS Snowball Edge 開発者ガイド
転送時のファイル名の変更、ファイルメタデータの変更、コピーオペレーション時のファイルへのデータ書き込みは、転送パフォーマンスに悪影響を及ぼします。転送時、ファイルは静的な状態にされることをお勧めします。
ネットワーク帯域の確保
Snowball Edge へのデータ転送はネットワーク経由です。Snowball Edge とクライアントの繋ぐネットワークは、ボトルネックにならないように十分な帯域を確保するか、夜間など他のネットワークトラフィックが減少している時間帯などに実行すると、期待したパフォーマンスを発揮できることに繋がります。
パフォーマンス - AWS Snowball Edge 開発者ガイド
AWS Snowball Edge デバイス、接続先のスイッチ、およびデータ ソースをホストするコンピューター間の他のローカル ネットワーク トラフィックを削減することで、データ転送速度を向上させることができます。
ネットワーク経路の削減
Snowball Edge とクライアントを繋ぐネットワーク間のホップ数は、必要最小限にすると転送速度の向上に繋がります。具体的にはネットワーク経路上の不要なスイッチングハブやルータを削減すると、ホップ数が削減できます。
不要なホップを削除